home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2000 March / maximum-cd-2000-03.iso / Quake3 Game Source / Q3AGameSource.exe / Main / ui_loadconfig.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-18  |  7.2 KB  |  255 lines

  1. // Copyright (C) 1999-2000 Id Software, Inc.
  2. //
  3. /*
  4. =============================================================================
  5.  
  6. LOAD CONFIG MENU
  7.  
  8. =============================================================================
  9. */
  10.  
  11. #include "ui_local.h"
  12.  
  13.  
  14. #define ART_BACK0            "menu/art/back_0"
  15. #define ART_BACK1            "menu/art/back_1"    
  16. #define ART_FIGHT0            "menu/art/load_0"
  17. #define ART_FIGHT1            "menu/art/load_1"
  18. #define ART_FRAMEL            "menu/art/frame2_l"
  19. #define ART_FRAMER            "menu/art/frame1_r"
  20. #define ART_ARROWS            "menu/art/arrows_horz_0"
  21. #define ART_ARROWLEFT        "menu/art/arrows_horz_left"
  22. #define ART_ARROWRIGHT        "menu/art/arrows_horz_right"
  23.  
  24. #define MAX_CONFIGS            128
  25. #define NAMEBUFSIZE            ( MAX_CONFIGS * 16 )
  26.  
  27. #define ID_BACK                10
  28. #define ID_GO                11
  29. #define ID_LIST                12
  30. #define ID_LEFT                13
  31. #define ID_RIGHT            14
  32.  
  33. #define ARROWS_WIDTH        128
  34. #define ARROWS_HEIGHT        48
  35.  
  36.  
  37. typedef struct {
  38.     menuframework_s    menu;
  39.  
  40.     menutext_s        banner;
  41.     menubitmap_s    framel;
  42.     menubitmap_s    framer;
  43.  
  44.     menulist_s        list;
  45.  
  46.     menubitmap_s    arrows;
  47.     menubitmap_s    left;
  48.     menubitmap_s    right;
  49.     menubitmap_s    back;
  50.     menubitmap_s    go;
  51.  
  52.     char            names[NAMEBUFSIZE];
  53.     char*            configlist[MAX_CONFIGS];
  54. } configs_t;
  55.  
  56. static configs_t    s_configs;
  57.  
  58.  
  59. /*
  60. ===============
  61. LoadConfig_MenuEvent
  62. ===============
  63. */
  64. static void LoadConfig_MenuEvent( void *ptr, int event ) {
  65.     if( event != QM_ACTIVATED ) {
  66.         return;
  67.     }
  68.  
  69.     switch ( ((menucommon_s*)ptr)->id ) {
  70.     case ID_GO:
  71.         trap_Cmd_ExecuteText( EXEC_APPEND, va( "exec %s\n", s_configs.list.itemnames[s_configs.list.curvalue] ) );
  72.         UI_PopMenu();
  73.         break;
  74.  
  75.     case ID_BACK:
  76.         UI_PopMenu();
  77.         break;
  78.  
  79.     case ID_LEFT:
  80.         ScrollList_Key( &s_configs.list, K_LEFTARROW );
  81.         break;
  82.  
  83.     case ID_RIGHT:
  84.         ScrollList_Key( &s_configs.list, K_RIGHTARROW );
  85.         break;
  86.     }
  87. }
  88.  
  89.  
  90. /*
  91. ===============
  92. LoadConfig_MenuInit
  93. ===============
  94. */
  95. static void LoadConfig_MenuInit( void ) {
  96.     int        i;
  97.     int        len;
  98.     char    *configname;
  99.  
  100.     UI_LoadConfig_Cache();
  101.  
  102.     memset( &s_configs, 0 ,sizeof(configs_t) );
  103.     s_configs.menu.wrapAround = qtrue;
  104.     s_configs.menu.fullscreen = qtrue;
  105.  
  106.     s_configs.banner.generic.type    = MTYPE_BTEXT;
  107.     s_configs.banner.generic.x        = 320;
  108.     s_configs.banner.generic.y        = 16;
  109.     s_configs.banner.string            = "LOAD CONFIG";
  110.     s_configs.banner.color            = color_white;
  111.     s_configs.banner.style            = UI_CENTER;
  112.  
  113.     s_configs.framel.generic.type    = MTYPE_BITMAP;
  114.     s_configs.framel.generic.name    = ART_FRAMEL;
  115.     s_configs.framel.generic.flags    = QMF_INACTIVE;
  116.     s_configs.framel.generic.x        = 0;  
  117.     s_configs.framel.generic.y        = 78;
  118.     s_configs.framel.width            = 256;
  119.     s_configs.framel.height            = 329;
  120.  
  121.     s_configs.framer.generic.type    = MTYPE_BITMAP;
  122.     s_configs.framer.generic.name    = ART_FRAMER;
  123.     s_configs.framer.generic.flags    = QMF_INACTIVE;
  124.     s_configs.framer.generic.x        = 376;
  125.     s_configs.framer.generic.y        = 76;
  126.     s_configs.framer.width            = 256;
  127.     s_configs.framer.height            = 334;
  128.  
  129.     s_configs.arrows.generic.type    = MTYPE_BITMAP;
  130.     s_configs.arrows.generic.name    = ART_ARROWS;
  131.     s_configs.arrows.generic.flags    = QMF_INACTIVE;
  132.     s_configs.arrows.generic.x        = 320-ARROWS_WIDTH/2;
  133.     s_configs.arrows.generic.y        = 400;
  134.     s_configs.arrows.width            = ARROWS_WIDTH;
  135.     s_configs.arrows.height            = ARROWS_HEIGHT;
  136.  
  137.     s_configs.left.generic.type        = MTYPE_BITMAP;
  138.     s_configs.left.generic.flags    = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY;
  139.     s_configs.left.generic.x        = 320-ARROWS_WIDTH/2;
  140.     s_configs.left.generic.y        = 400;
  141.     s_configs.left.generic.id        = ID_LEFT;
  142.     s_configs.left.generic.callback    = LoadConfig_MenuEvent;
  143.     s_configs.left.width            = ARROWS_WIDTH/2;
  144.     s_configs.left.height            = ARROWS_HEIGHT;
  145.     s_configs.left.focuspic            = ART_ARROWLEFT;
  146.  
  147.     s_configs.right.generic.type    = MTYPE_BITMAP;
  148.     s_configs.right.generic.flags    = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY;
  149.     s_configs.right.generic.x        = 320;
  150.     s_configs.right.generic.y        = 400;
  151.     s_configs.right.generic.id        = ID_RIGHT;
  152.     s_configs.right.generic.callback = LoadConfig_MenuEvent;
  153.     s_configs.right.width            = ARROWS_WIDTH/2;
  154.     s_configs.right.height            = ARROWS_HEIGHT;
  155.     s_configs.right.focuspic        = ART_ARROWRIGHT;
  156.  
  157.     s_configs.back.generic.type        = MTYPE_BITMAP;
  158.     s_configs.back.generic.name        = ART_BACK0;
  159.     s_configs.back.generic.flags    = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
  160.     s_configs.back.generic.id        = ID_BACK;
  161.     s_configs.back.generic.callback    = LoadConfig_MenuEvent;
  162.     s_configs.back.generic.x        = 0;
  163.     s_configs.back.generic.y        = 480-64;
  164.     s_configs.back.width            = 128;
  165.     s_configs.back.height            = 64;
  166.     s_configs.back.focuspic            = ART_BACK1;
  167.  
  168.     s_configs.go.generic.type        = MTYPE_BITMAP;
  169.     s_configs.go.generic.name        = ART_FIGHT0;
  170.     s_configs.go.generic.flags        = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS;
  171.     s_configs.go.generic.id            = ID_GO;
  172.     s_configs.go.generic.callback    = LoadConfig_MenuEvent;
  173.     s_configs.go.generic.x            = 640;
  174.     s_configs.go.generic.y            = 480-64;
  175.     s_configs.go.width                = 128;
  176.     s_configs.go.height                = 64;
  177.     s_configs.go.focuspic            = ART_FIGHT1;
  178.  
  179.     // scan for configs
  180.     s_configs.list.generic.type        = MTYPE_SCROLLLIST;
  181.     s_configs.list.generic.flags    = QMF_PULSEIFFOCUS;
  182.     s_configs.list.generic.callback    = LoadConfig_MenuEvent;
  183.     s_configs.list.generic.id        = ID_LIST;
  184.     s_configs.list.generic.x        = 118;
  185.     s_configs.list.generic.y        = 130;
  186.     s_configs.list.width            = 16;
  187.     s_configs.list.height            = 14;
  188.     s_configs.list.numitems            = trap_FS_GetFileList( "", "cfg", s_configs.names, NAMEBUFSIZE );
  189.     s_configs.list.itemnames        = (const char **)s_configs.configlist;
  190.     s_configs.list.columns            = 3;
  191.  
  192.     if (!s_configs.list.numitems) {
  193.         strcpy(s_configs.names,"No Files Found.");
  194.         s_configs.list.numitems = 1;
  195.  
  196.         //degenerate case, not selectable
  197.         s_configs.go.generic.flags |= (QMF_INACTIVE|QMF_HIDDEN);
  198.     }
  199.     else if (s_configs.list.numitems > MAX_CONFIGS)
  200.         s_configs.list.numitems = MAX_CONFIGS;
  201.     
  202.     configname = s_configs.names;
  203.     for ( i = 0; i < s_configs.list.numitems; i++ ) {
  204.         s_configs.list.itemnames[i] = configname;
  205.         
  206.         // strip extension
  207.         len = strlen( configname );
  208.         if (!Q_stricmp(configname +  len - 4,".cfg"))
  209.             configname[len-4] = '\0';
  210.  
  211.         Q_strupr(configname);
  212.  
  213.         configname += len + 1;
  214.     }
  215.  
  216.     Menu_AddItem( &s_configs.menu, &s_configs.banner );
  217.     Menu_AddItem( &s_configs.menu, &s_configs.framel );
  218.     Menu_AddItem( &s_configs.menu, &s_configs.framer );
  219.     Menu_AddItem( &s_configs.menu, &s_configs.list );
  220.     Menu_AddItem( &s_configs.menu, &s_configs.arrows );
  221.     Menu_AddItem( &s_configs.menu, &s_configs.left );
  222.     Menu_AddItem( &s_configs.menu, &s_configs.right );
  223.     Menu_AddItem( &s_configs.menu, &s_configs.back );
  224.     Menu_AddItem( &s_configs.menu, &s_configs.go );
  225. }
  226.  
  227. /*
  228. =================
  229. UI_LoadConfig_Cache
  230. =================
  231. */
  232. void UI_LoadConfig_Cache( void ) {
  233.     trap_R_RegisterShaderNoMip( ART_BACK0 );
  234.     trap_R_RegisterShaderNoMip( ART_BACK1 );
  235.     trap_R_RegisterShaderNoMip( ART_FIGHT0 );
  236.     trap_R_RegisterShaderNoMip( ART_FIGHT1 );
  237.     trap_R_RegisterShaderNoMip( ART_FRAMEL );
  238.     trap_R_RegisterShaderNoMip( ART_FRAMER );
  239.     trap_R_RegisterShaderNoMip( ART_ARROWS );
  240.     trap_R_RegisterShaderNoMip( ART_ARROWLEFT );
  241.     trap_R_RegisterShaderNoMip( ART_ARROWRIGHT );
  242. }
  243.  
  244.  
  245. /*
  246. ===============
  247. UI_LoadConfigMenu
  248. ===============
  249. */
  250. void UI_LoadConfigMenu( void ) {
  251.     LoadConfig_MenuInit();
  252.     UI_PushMenu( &s_configs.menu );
  253. }
  254.  
  255.